/******************************************************************************
** 公司名称：天津柯迪斯科技有限公司
** 版权信息：
** 文件名称： bsp_Timer.c
** 模块名称： KD386-AT32F415CBT7-BFI-CAN仪表定时器初始化模块
** 版 本 号： V1.0
** 作    者： 蒲磊
** 备    注： TIM2_CH2：用作LCD的背光源控制，1KHz
**			  TIM9:用做通用定时器，定时周期20ms，用于按键扫描
**            TIM10定时周期100ms，用于定时发送串口数据
**            TIM1定时器周期1S，用于处理需要计时的任务
**
** 修改记录： 版本     修改人      时间         修改内容
**
******************************************************************************/

/******************************************************************************
* 头文件
******************************************************************************/
#include "bsp_Timer.h"
#include "bsp_key.h"
#include "bsp_LCD.h"
#include "APP_Protocol.h"
/******************************************************************************
* 本文件宏定义 ('#define')
******************************************************************************/

/******************************************************************************
* 本文件类型定义 ('typedef')
******************************************************************************/

/******************************************************************************
* 函数声明 ('static')
******************************************************************************/
extern void vEvent_1S_Callback(void);
extern void vUSB_state(void);
/******************************************************************************
* 全局变量定义
******************************************************************************/
volatile uint8_t   gucFlashFlag = 0;		/*闪烁标志*/
/*****************************************************************************
* 函数实现 - global ('extern') and local ('static')
******************************************************************************/




/******************************************************************************
** 功  能：设定背光等级（百分比）
** 参  数：Backlight-背光等级。0-100.0-关闭背光，100-背光最亮
** 返回值：无
** 备  注：背光PWM频率1KHz。
******************************************************************************/
void vBsp_SetBacklight(uint8_t Backlight)
{
    if(Backlight > 100)
    {
        Backlight = 100;
    }
    __HAL_TIM_SetCompare(&htim3,TIM_CHANNEL_3,Backlight);

}


/******************************************************************************
** 功  能：定时器溢出中断函数
** 参  数：无
** 返回值：无
** 备  注：
******************************************************************************/
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
    uint16_t lusKeyValue;
    muilt_cyc_fifo_error_code_t    lxState;
    static uint8_t lucFlashFlag_ticks = 0;

    if(htim->Instance == TIM1)
    {
//        tmr_flag_clear(TMR11,TMR_OVF_INT);
//        Setdata_Main_to_BT();
//        bt_data_Regular_update();           /*检测蓝牙数据是否需要发送*/
    }
    else if(htim->Instance == TIM14)
    {
        vEvent_1S_Callback();
    }
    else if(htim->Instance == TIM16)
    {
        vPROTOCOL_Loop();					/*调用协议轮询函数，轮询处理协议部分*/
    }
    else if(htim->Instance == TIM17)
    {
        if(++lucFlashFlag_ticks > 25)
        {
            lucFlashFlag_ticks = 0;
            gucFlashFlag = gucFlashFlag == 0 ? 1 : 0;		/*25次，500ms，闪烁标志位翻转一次*/
        }

        lusKeyValue = usKey_Scan();             /*按键扫描*/

        if(lusKeyValue != KEY_NULL)
        {
            MCF_WriteDataInFifo(KEY_FIFO_ID,(uint8_t *)&lusKeyValue,2,&lxState);		/*将键值传递放入缓存*/
        }

        //if(lucFlashFlag_ticks % 5 == 0) /*100ms刷新一次*/
        {
            vBsp_LCD_Refresh();                     /*LCD屏幕刷新*/
        }

        vUSB_state();
    }
}


/******************************************************************************
 ** 功  能：获取翻转标志
 ** 参  数：
 ** 返回值：翻转标志的值,0或1
 ** 备  注：
 ******************************************************************************/
uint8_t ucBsp_GetFlashFlag(void)
{
    return gucFlashFlag;
}
